package com.jmb.api.web.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jmb.api.common.exception.WebApiException;
import com.jmb.api.common.result.ResultCodeEnum;
import com.jmb.api.entity.Module;
import com.jmb.api.vo.module.ModuleAndProjectVO;
import com.jmb.api.vo.module.ModuleInfoVO;
import com.jmb.api.vo.module.ModuleQueryVO;
import com.jmb.api.vo.project.ProjectModuleNameVO;
import com.jmb.api.web.mapper.ProjectMapper;
import com.jmb.api.web.service.ModuleService;
import com.jmb.api.web.mapper.ModuleMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
* @author 金梦博
* @description 针对表【t_module】的数据库操作Service实现
* @createDate 2025-09-25 17:20:24
*/
@Service
public class ModuleServiceImpl extends ServiceImpl<ModuleMapper, Module>
    implements ModuleService{

    @Autowired
    private ModuleMapper moduleMapper;


    @Override
    public void saveOrUpdateModule(Module module) {
        // 判断是更新还是新增
        boolean isUpdate = module.getId() != null;

        // 查询模块名是否存在
        LambdaQueryWrapper<Module> moduleWrapper = new LambdaQueryWrapper<>();
        moduleWrapper.eq(Module::getName, module.getName());

        // 如果是修改，需要排除当前项目
        if (isUpdate){
            moduleWrapper.ne(Module::getId, module.getId());
        }
        // 判断模块名称是否已存在
        if (moduleMapper.selectOne(moduleWrapper) != null){
            // 模块已存在，抛出异常
            throw new WebApiException(ResultCodeEnum.web_Module_EXIST_ERROR);
        }
        super.saveOrUpdate(module);


    }

    @Override
    public IPage<ModuleInfoVO> listModuleInfo(IPage<ModuleInfoVO> page, ModuleQueryVO moduleQueryVO) {
        return moduleMapper.listModuleInfo(page, moduleQueryVO);
    }

    @Override
    public List<ModuleAndProjectVO> listModuleAndProject() {
        return moduleMapper.listModuleAndProject();
    }
}




